草庐IT

Python float - str - 浮点怪异

全部标签

c++ - 为什么 stringstreams rdbuf() 和 str() 给我不同的输出?

我有这个代码,intmain(){std::stringst;std::stringstreamss;ssstr():"str();std::cout给我这个输出ss.rdbuf()->str():hejhejmeddigss.rdbuf():hejmeddig但这是为什么呢?是因为ostreams对operator 最佳答案 ss.rdbuf()->str();返回所有缓冲区内容的拷贝。在做什么std::cout?查看说明basic_ostream&operator*sb);它从缓冲区逐个字符地读取并将它们写入ostream,直到

c++ - 浮点转换和性能

我知道在float和整数之间进行转换时可能会出现错误,但是性能如何(请忽略精度问题)?如果我对不同算术类型的操作数进行n元运算,即对不同的浮点类型(例如float和double)和浮点/整数类型组合(例如float和int)?是否存在经验法则,例如让所有操作数保持同一类型?P.S.:我问是因为我正在编写一个表达式模板库,并且想知道是否允许对包含不同算术类型的值的vector进行二元运算。 最佳答案 我怀疑这个问题的答案会因目标架构而异,因为转换可以(但可能不会)发生在硬件中。例如,考虑以下代码,它导致int和float之间的一些相互

c++ - C/C++ 中浮点常量的紧凑无损表示

我有一个用C++编写的程序,它正在生成用于数学计算的C源代码。我注意到常量在生成的代码中占用了很多空间,正在寻找更紧凑的表示形式。为了生成常量,我现在使用:doublev=...cfile::digits10+1)我很确定这是一种无损表示,但它也非常臃肿。例如,零和一将表示为0.0000000000000000e+00和1.0000000000000000e+00。和“0”。或“1”。携带同样多的信息。有没有办法以更紧凑但仍然无损的方式将常量打印到文件中?它不需要对人类读者来说看起来很好,只要在纯C代码中出现就可以编译(如果是C99,我更愿意它也是有效的C++)。如果它是可移植的,十六

c++ - C++ 字符串和 C 字符串 ( .c_str() ) 之间的区别

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:Whydoesstd::stringnotprovideaconversiontoconstchar*?Whydoesn'tstd::stringprovideimplicitconversiontochar*?case1:voidreadFile(conststring&inputfile){ifstreamin(inputfile);}case2:voidreadFile(conststring&inputfile){ifstreamin(inputfile.c_str());}当然,我知道如何调用if

c++ - 是否必须释放 std::string.c_str() 或 std::string.data() 返回的指针?

据我所知,当您调用c_str()/data()时,std::string会创建其内容的标识数组拷贝方法(有/没有终止NUL-char,在这里无关紧要)。不管怎样,对象是否也负责释放这个数组,还是我必须这样做?简而言之:std::stringhello("content");constchar*Ptr=hello.c_str();//useit....delete[]Ptr;////really???我只是想在内存分配方面保持安全。 最佳答案 不,您不需要释放ptr指针。ptr指向位于内部位置某处的不可修改字符串(实际上这是编译器的实

c++ - 有了模板,如何区分两种并列的情况,比如浮点型和整数型?

cppreference.com(http://en.cppreference.com/w/cpp/types/enable_if#Notes)指出:Acommonmistakeistodeclaretwofunctiontemplatesthatdifferonlyintheirdefaulttemplatearguments.Thisisillegalbecausedefaulttemplateargumentsarenotpartoffunctiontemplate'ssignature,anddeclaringtwodifferentfunctiontemplateswitht

c++ - 什么时候浮点变量不等于自身

我在编程测试中被问到这个问题。问题是,我被传入一个float作为参数,并询问以下代码何时为假。boolresult=(floatValue==floatValue);我想不出一个合理的理由或什么时候这是错误的,但仍然不能。最后,我回答说,这绝不会是假的。想知道是否有人可以给我一些例子来说明什么时候这是错误的 最佳答案 float==NaN如果floatValue是非数字的计算结果,例如0/0。 关于c++-什么时候浮点变量不等于自身,我们在StackOverflow上找到一个类似的问题:

c++ - 添加多个浮点变量时最小化浮点错误

在我的C++应用程序中,我有一个范围为(0,1)的doublevector,我必须尽可能准确地计算它的总数。感觉这个问题之前应该已经解决了,但是我找不到任何东西。显然,如果vector大小很大并且有些项明显小于其他项,则迭代vector上的每个项并执行sum+=vect[i]会累积一个重大错误。我目前的解决方案是这个功能:doublesumDoubles(vectorarg)//passbycopy{sort(arg.rbegin(),arg.rend());//sortinreverseorderfor(inti=1;i基本上它按升序对输入进行排序并计算成对的总和:a+b+c+d+e

c++ - 使用 std::ofstream 在 C++ 中格式化浮点变量输出

我有以下代码:std::ofstreammyfile;std::stringstreamfilename3;myfile.open("results.txt");myfile我文件中的输出格式如下:precision=5.96e-07...如何将数值打印为数字而不是使用e表示的数值? 最佳答案 使用流操纵器fixed:myfile您可能还想使用setprecision调整小数位数。 关于c++-使用std::ofstream在C++中格式化浮点变量输出,我们在StackOverflow上

C语言再学习 -- 单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换(转载))

之前讲过浮点数部分,参看:C语言再学习–浮点数现在程序中要将浮点数,通过TCP发送。那得先将其转换为十六进制才行呀。那么问题就来了。参看:C语言:单精度(float)和双精度(double)浮点数与十六进制(HEX)之间转换扩展:STM32开发–进制与字符串间的转换一、浮点数介绍单精度浮点float:可以精确到小数点后6位双精度浮点double:可以精确到小数点后12位C可以通过f或F后缀是编译器把浮点常量当做float类型,比如2.3f和9.11E9F。l或L后缀使一个数字成为longdouble类型,比如54.3l和4.32e4L。建议使用L后缀,因为字母l和数字1容易混淆没有后缀的浮点常